package com.zhb.zhbaiagent.agent;

import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.extern.slf4j.Slf4j;

//@EqualsAndHashCode(callSuper = true)
@Data
@Slf4j
/**
 * 实现代理抽象类,实现思考-行动的循环模式
 * 继承自BaseAgent,将step方法分解为思考和行动两个方法
 */
public abstract class ReActAgent extends BaseAgent{
    /**
     * 处理当前状态并决定下一步行动
     * 是否需要执行行动,true表示需要执行行动,false表示不需要执行行动
     * @return
     */
    public abstract boolean think();

    /**
     *执行决定的行动
     *
     * @return 行动执行结果
     */
    public abstract String act();
    @Override
    public String step() {
        try {
            boolean shouldAct = think();
            if(!shouldAct){
                return "思考完成-无需行动";
            }
            return act();
        } catch (Exception e) {
            e.printStackTrace();
            return "步骤执行失败:"+e.getMessage();
        }
    }

}
